package com.weilan.ark3.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

/**
 *
 * @description 时间日期工具类
 * @date 2023/4/24 14:49
 */

public class DateUtils {
    /**
     * 获取当前时间
     *
     * @return now date
     */
    public static String currentTime() {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return dateFormat.format(new Date());
    }

    /**
     * 获取当天时间（文件命名）
     * 命名不能出现冒号 ：
     *
     * @return now date
     */
    public static String currentTimeFile() {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd");
        return dateFormat.format(new Date());
    }

    /**
     * 获取当前时间（文件命名）
     * 命名不能出现冒号 ：
     *
     * @return now date
     */
    public static String currentTimeNamingFile() {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss");
        return dateFormat.format(new Date());
    }

    /**
     * 获取当前时间（数据库表命名）
     *
     * @return now date
     */
    public static String currentTimeNamingDatabase() {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
        return dateFormat.format(new Date());
    }

    /*
     * 获得某一天的时间
     *
     * */
    public static String beforeTime(Integer num) {
        // 创建Calendar对象，并将日期设置为当前日期
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());

        // 获取几天前的日期
        // int daysToSubtract = 5; // 要减去的天数
        //calendar.add(Calendar.DAY_OF_MONTH, -daysToSubtract);
        calendar.add(Calendar.DAY_OF_MONTH, -num);

        // 获取计算后的日期
        Date date = calendar.getTime();

        // 使用SimpleDateFormat格式化日期
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate = dateFormat.format(date);

        //System.out.println("几天前的日期是: " + formattedDate);
        return formattedDate;
    }

    /*
     * 获得当前时间为当天哪个小时（24小时制）
     * */
    public static String tiemHour() {
        // 获取当前时间
        LocalTime currentTime = LocalTime.now();

        // 定义时间格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");

        // 格式化时间
        String formattedTime = currentTime.format(formatter);

        return formattedTime;
    }

    /*
     * 判断当前时间是否在这个时间段
     * beginTime，endTime格式"HH:mm"
     *
     * */
    public static boolean belongCalendar(String nowTime, String beginTime, String endTime) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
        Boolean result = null;
        try {
            Date nowdata = dateFormat.parse(nowTime);
            Date begindata = dateFormat.parse(beginTime);
            Date enddata = dateFormat.parse(endTime);


            Calendar date = Calendar.getInstance();
            date.setTime(nowdata);

            Calendar begin = Calendar.getInstance();
            begin.setTime(begindata);

            Calendar end = Calendar.getInstance();
            end.setTime(enddata);

            if ((date.after(begin) ||date.equals(begin)) && date.before(end)) {
                result = true;
            } else {
                result = false;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 毫秒值转日期
     */
    public static String millisecondToStr(String str) {
        long milliseconds = Long.parseLong(str);

        Date date = new Date(milliseconds);

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sdf.setTimeZone(TimeZone.getTimeZone("GMT+3")); // 设置为中国时区

        return sdf.format(date);
    }

    /**
     * 日期格式转换 2023-06-02 ------>   20230602
     */
    public static String dateFormatConversion(String time) {

        LocalDate date = LocalDate.parse(time);

        DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
        String outputDate = date.format(outputFormatter);
        return outputDate;
    }

    /*
    * 获得当前时间的年月日时分秒
    * */
    /*
     * 将时间转换为HH:mm
     * */
    public static String  transMill(String time) {
        //String inputTime = "7:7"; // 输入的时间
        String formattedTime = null;
        // 将输入时间字符串解析为小时和分钟
        String[] timeParts = time.split(":");
        if (timeParts.length == 2) {
            int hours = Integer.parseInt(timeParts[0]);
            int minutes = Integer.parseInt(timeParts[1]);

            // 格式化小时和分钟为时分格式
            formattedTime = String.format("%02d:%02d", hours, minutes);

//            System.out.println("格式化后的时间: " + formattedTime);
        }
        return formattedTime;
    }
}
